smlimitlessfandomcom-20200214-history
Content Package
A content package is a file folder containing a managed assembly of sprites and tiles, a collection of graphics, sounds, as well as package settings and metadata information to piece together graphics objects. They are stored in %AppData%/SMLimitless/Content Packages/. The folder contains the assembly file, a settings.txt file and any number of subfolders that can contain graphics, as well as sound and music folders. Episodes, worlds, and levels can modify elements of a content package by using an overrides file. Settings The settings file, settings.txt is a plaintext file that stores information about the content package. Comments begin with a semicolon and are removed before processing. The up-to-date specification for the content package settings format can be found here. It defines a name, author, path to the assembly, and a defined path name (like %SmlContent%) that can be used in file paths. Graphics Graphics will be stored in PNG format in subfolders of the package. Additionally, an optional text file with the same name as the image can be stored. For example, a goomba.png might have a goomba.txt file with it. This text file defines several properties of the graphic and is used by the game or Sprite/Tile instance to determine how to set up the graphics objects. If no text file is included, the graphic is assumed to be a single frame. If a text file is included, the information is used to determine how to set up the object. An animated graphics object uses this specification , and a complex graphics object uses this specification . Usage Levels specify the name of the folder of the content pack that they use. The game will check both the level's own folder and the %AppData%/SMLimitless/Content Packages/. Large content packages with dozens or hundreds of sprites will be recommended to not be included in the download for a level. Instead, they should be released as their own packages, to be installed into %AppData%/SMLimitless/Content Packages/. Smaller content packages that only store a few sprites can be included with the level's download. In the code, methods in ContentPackageManager can be called to load graphics and sound objects using GraphicsManager, with proper checks for overrides. These methods return loaded instances of the objects, and are called during Load() methods in the screen objects. The objects can have their content loaded through a normal LoadContent() call. Modification Content packages are not meant to be modified directly. Rather, users can modify individual elements of a content package on a per-level, per-world, or per-episode (global) basis. Generally, users place their custom graphics in folders that are in the same folder as the levels (see File Structures). Then, they add a file called overrides.txt that lists which levels are overriden by each folder (for example, level1 = blue_grass_gfx). Multiple levels can be overriden by a single folder, and multiple folders can be used to override a level's graphics (level1 = blue_grass_gfx, rainbow_koopas, blue_sky). Folders are searched in the reverse order of their declaration; that is, the folder declared last is searched first. If the resource cannot be found in a folder, the folder declared before that is searched. If no override has the resource, the content package itself is searched. If the content package doesn't have the resource, an exception is thrown. This allows people who make custom graphics to simply separate their graphics by folder, and users can simply take a folder and add it to the overrides. Additionally, new graphics (for normal blocks and level backgrounds, which do not need complex objects) can be added to the folder and specified by the level. The level editor may support adding overrides instead of doing it through a text editor.